package com.springapp.model;

import javax.persistence.Entity;
import java.util.List;

/**
 * Created by nicol_000 on 28/08/14.
 */
@Entity
public class Article {
    private int eIDArticle;
    private String sRefArticle;
    private String sLibelle;
    private float fVolume;
    private String sNorme;
    private String sCommentaire;
    private String sClasse;
    private String sSousCat;
    private float eStockMini;
    private float eStockSecurite;
    private float eStockAlerte;
    private float eStockPickingMini;
    private float eStockPickingSecurite;
    private float eStockAlertePicking;
    private String  sProvenance;
    private int eBesoinQuotidienMoy;
    private int eBesoinQuotidienMax;
    private int eDelaisLivraisonMoyen;
    private int eQteTotale;
    private int eQteTotalePalette;
    private int eQteArticleByFournisseur;
    private int eQtePaletteByFournisseur;
    private Boolean bAlertOrange;
    private Boolean bAlertRouge;
    private List<InfoArticle> lstInfo;

    public Article() {
    }

    public Article(int eIDArticle, String sRefArticle, String sLibelle, float fVolume, String sNorme, String sClasse, String sSousCat, int eBesoinQuotidienMoy, int eBesoinQuotidienMax, int eDelaisLivraisonMoyen, float eStockMini, float eStockAlerte, float eStockSecurite , int eQteTotale, float eStockPickingMini, float eStockAlertePicking, float eStockPickingSecurite) {
        this.eIDArticle = eIDArticle;
        this.sRefArticle = sRefArticle;
        this.sLibelle = sLibelle;
        this.fVolume = fVolume;
        this.sNorme = sNorme;
        this.sClasse = sClasse;
        this.sSousCat = sSousCat;
        this.eBesoinQuotidienMoy = eBesoinQuotidienMoy;
        this.eBesoinQuotidienMax = eBesoinQuotidienMax;
        this.eDelaisLivraisonMoyen = eDelaisLivraisonMoyen;
        this.eStockMini = eStockMini;
        this.eStockAlerte = eStockAlerte;
        this.eStockSecurite = eStockSecurite;
        this.eQteTotale = eQteTotale;
        this.eStockPickingMini = eStockPickingMini;
        this.eStockAlertePicking = eStockAlertePicking;
        this.eStockPickingSecurite =  eStockPickingSecurite;
        this.bAlertOrange = false;
        this.bAlertRouge = false;

    }

    public Article(int eIDArticle, String sRefArticle, String sLibelle, String sSousCat) {
        this.eIDArticle = eIDArticle;
        this.sRefArticle = sRefArticle;
        this.sLibelle = sLibelle;
        this.sSousCat = sSousCat;
    }

    public Article(int eIDArticle, String sRefArticle, String sSousCat, int eQteTotalePalette, int eQteTotale, List<InfoArticle> lstInfo, String sProvenance, int eQteArticleByFournisseur, int eQtePaletteByFournisseur ) {
        this.eIDArticle = eIDArticle;
        this.sRefArticle = sRefArticle;
        this.sSousCat = sSousCat;
        this.eQteTotalePalette = eQteTotalePalette;
        this.eQteTotale = eQteTotale;
        this.lstInfo = lstInfo;
        this.sProvenance = sProvenance;
        this.eQteArticleByFournisseur = eQteArticleByFournisseur;
        this.eQtePaletteByFournisseur = eQtePaletteByFournisseur;
    }


    public boolean bEstAlerteOrange(int _QteArticleTotale, float _eStockSecurite, float _eStockAlerte){
        boolean bOk = false;
        if((_QteArticleTotale < _eStockSecurite) && (_QteArticleTotale >=_eStockAlerte ))
        {
            bOk = true;
        }
        return bOk;
    }

    public boolean bEstAlerteRouge(int _QteArticleTotale, float _eStockAlerte){
        boolean bOk = false;
        if((_QteArticleTotale < _eStockAlerte) && (_QteArticleTotale >= 0))
        {
            bOk = true;
        }
        return bOk;
    }

    /**
     * Surcharge getters pour calculer stok alerte pikcing = 40%
     * @param _eBesoinQuotidienMoy
     * @param _eDelaisLivraisonMoyen
     * @return
     */
    public float geteStockAlertePicking(int _eBesoinQuotidienMoy, int _eDelaisLivraisonMoyen) {
        return ((float)0.4 * (_eBesoinQuotidienMoy * _eDelaisLivraisonMoyen));
    }


    /**
     * Surcharger Getters pour calculer stock mini picking = 20%
     * @param _eBesoinQuotidienMoy
     * @param _fJourDelais
     * @return
     */
    public float geteStockMiniPicking(int _eBesoinQuotidienMoy, float _fJourDelais) {
        return ((float)0.2 * (_eBesoinQuotidienMoy * _fJourDelais));
    }

    /**
     * Surcharger getters pour calculer stock secu
     * @param _eStockMini
     * @param _eStockAlerte
     * @return
     */
    public float geteStockSecuritePicking(float _eStockMini, float _eStockAlerte) {
        return _eStockMini + _eStockAlerte;
    }



    /**
     * Surcharge getters pour calculer stok alerte
     * @param _eBesoinQuotidienMoy
     * @param _eDelaisLivraisonMoyen
     * @return
     */
    public float geteStockAlerte(int _eBesoinQuotidienMoy, int _eDelaisLivraisonMoyen) {
        return _eBesoinQuotidienMoy * _eDelaisLivraisonMoyen;
    }


    /**
     * Surcharger Getters pour calculer stock mini
     * @param _eBesoinQuotidienMoy
     * @param _fJourDelais
     * @return
     */
    public float geteStockMini(int _eBesoinQuotidienMoy, float _fJourDelais) {
        return _eBesoinQuotidienMoy * _fJourDelais;
    }

    /**
     * Surcharger getters pour calculer stock secu
     * @param _eStockMini
     * @param _eStockAlerte
     * @return
     */
    public float geteStockSecurite(float _eStockMini, float _eStockAlerte) {
        return _eStockMini + _eStockAlerte;
    }


    //region GettersSetters


    public String getsProvenance() {
        return sProvenance;
    }

    public int geteQteArticleByFournisseur() {
        return eQteArticleByFournisseur;
    }

    public void seteQteArticleByFournisseur(int eQteArticleByFournisseur) {
        this.eQteArticleByFournisseur = eQteArticleByFournisseur;
    }

    public int geteQtePaletteByFournisseur() {
        return eQtePaletteByFournisseur;
    }

    public void seteQtePaletteByFournisseur(int eQtePaletteByFournisseur) {
        this.eQtePaletteByFournisseur = eQtePaletteByFournisseur;
    }

    public void setsProvenance(String sProvenance) {
        this.sProvenance = sProvenance;
    }

    public int geteQteTotalePalette() {
        return eQteTotalePalette;
    }

    public void seteQteTotalePalette(int eQteTotalePalette) {
        this.eQteTotalePalette = eQteTotalePalette;
    }

    public void setbAlertOrange(Boolean bAlertOrange) {
        this.bAlertOrange = bAlertOrange;
    }

    public void setbAlertRouge(Boolean bAlertRouge) {
        this.bAlertRouge = bAlertRouge;
    }

    public List<InfoArticle> getLstInfo() {
        return lstInfo;
    }

    public void setLstInfo(List<InfoArticle> lstInfo) {
        this.lstInfo = lstInfo;
    }

    public void setAlertOrange(boolean alertOrange) {
        bAlertOrange = alertOrange;
    }

    public void setAlertRouge(boolean alertRouge) {
        bAlertRouge = alertRouge;
    }

    public Boolean getbAlertRouge() {
        return bAlertRouge;
    }

    public Boolean getbAlertOrange() {
        return bAlertOrange;
    }

    public float geteStockPickingMini() {
        return eStockPickingMini;
    }

    public void seteStockPickingMini(float eStockPickingMini) {
        this.eStockPickingMini = eStockPickingMini;
    }

    public float geteStockPickingSecurite() {
        return eStockPickingSecurite;
    }

    public void seteStockPickingSecurite(float eStockPickingSecurite) {
        this.eStockPickingSecurite = eStockPickingSecurite;
    }

    public float geteStockAlertePicking() {
        return eStockAlertePicking;
    }

    public void seteStockAlertePicking(float eStockAlertePicking) {
        this.eStockAlertePicking = eStockAlertePicking;
    }

    public String getsClasse() {
        return sClasse;
    }

    public void setsClasse(String sClasse) {
        this.sClasse = sClasse;
    }

    public int geteQteTotale() {
        return eQteTotale;
    }

    public void seteQteTotale(int eQteTotale) {
        this.eQteTotale = eQteTotale;
    }

    public float geteStockMini() {
        return eStockMini;
    }

    public float geteStockSecurite() {
        return eStockSecurite;
    }

    public float geteStockAlerte() {
        return eStockAlerte;
    }
    public int geteDelaisLivraisonMoyen() {
        return eDelaisLivraisonMoyen;
    }

    public void seteDelaisLivraisonMoyen(int eDelaisLivraisonMoyen) {
        this.eDelaisLivraisonMoyen = eDelaisLivraisonMoyen;
    }

    public int geteBesoinQuotidienMoy() {
        return eBesoinQuotidienMoy;
    }

    public void seteBesoinQuotidienMoy(int eBesoinQuotidienMoy) {
        this.eBesoinQuotidienMoy = eBesoinQuotidienMoy;
    }

    public int geteBesoinQuotidienMax() {
        return eBesoinQuotidienMax;
    }

    public void seteBesoinQuotidienMax(int eBesoinQuotidienMax) {
        this.eBesoinQuotidienMax = eBesoinQuotidienMax;
    }

    public String getsSousCat() {
        return sSousCat;
    }

    public void setsSousCat(String sSousCat) {
        this.sSousCat = sSousCat;
    }


    public void seteStockMini(float eStockMini) {
        this.eStockMini = eStockMini;
    }
    public void seteStockSecurite(float eStockSecurite) {
        this.eStockSecurite = eStockSecurite;
    }
    public void seteStockAlerte(float eStockAlerte) {
        this.eStockAlerte = eStockAlerte;
    }

    public int geteIDArticle() {
        return eIDArticle;
    }

    public void seteIDArticle(int eIDArticle) {
        this.eIDArticle = eIDArticle;
    }

    public String getsRefArticle() {
        return sRefArticle;
    }

    public void setsRefArticle(String sRefArticle) {
        this.sRefArticle = sRefArticle;
    }

    public String getsLibelle() {
        return sLibelle;
    }

    public void setsLibelle(String sLibelle) {
        this.sLibelle = sLibelle;
    }

    public float getfVolume() {
        return fVolume;
    }

    public void setfVolume(float fVolume) {
        this.fVolume = fVolume;
    }

    public String getsNorme() {
        return sNorme;
    }

    public void setsNorme(String sNorme) {
        this.sNorme = sNorme;
    }

    public String getsCommentaire() {
        return sCommentaire;
    }

    public void setsCommentaire(String sCommentaire) {
        this.sCommentaire = sCommentaire;
    }
    //endregion

}